﻿Imports System.Drawing.Printing

Namespace Objects

    Public Class PrintVerkoopsrapportDocument
        Inherits PrintFairShopDocument

        Private _verkopen As List(Of ArtikelsDataSet.VerkopenRow)

        ' lopende totalen
        Private _totaalPrijs As Decimal = 0 ' Inclusief cheques en leeggoed
        Private _leeggoedEnCheques As Decimal = 0
        Private _bTW0 As Decimal = 0 ' totaalprijs van producten verkocht aan 0% btw inclusief leeggoed en cheques
        Private _bTW6 As Decimal = 0 ' totaalprijs van producten verkocht aan 6% btw
        Private _bTW21 As Decimal = 0 ' totaalprijs van producten verkocht aan 21% btw
        Private _kasverschil As Decimal = 0

#Region "Constructor en initialisatie"

        Public Sub New(ByVal verkopen As List(Of ArtikelsDataSet.VerkopenRow))
            MyBase.New()
            _verkopen = verkopen
        End Sub

#End Region

#Region "Protected en public methods"

        Protected Overrides ReadOnly Property DetailCount() As Integer
            Get
                Return _verkopen.Count
            End Get
        End Property

        Protected Overrides ReadOnly Property FooterLineCount() As Integer
            Get
                Return 0 ' TODO?
            End Get
        End Property

        Protected Overrides Sub InitializePrinter()
            Me.PrinterSettings.PrinterName = Configuratie.Printer
            MyBase.DefaultPageSettings.Landscape = True
        End Sub

        Protected Overrides ReadOnly Property NaamSjabloon() As String
            Get
                Return "verkoopsrapport.flo"
            End Get
        End Property

        Protected Overrides Function PrintHoofding(ByVal top As Integer) As Integer
            Return top ' geen  hoofding
        End Function

        Protected Overrides Function PrintVervolgHoofding(ByVal top As Integer) As Integer
            Return top ' geen  vervolghoofding
        End Function

        Protected Overrides Function PrintDetails(ByVal top As Integer) As Integer
            ' print kolomtitels voor detail
            Dim detailBlok As DocumentBlok = GetBlok("detail")
            If (detailBlok.TitelRij IsNot Nothing) Then
                top = detailBlok.TitelRij.Print(top, _gdiPage)
            End If

            While _indexVolgendAfTeDrukkenDetail < DetailCount
                Dim verkoop As ArtikelsDataSet.VerkopenRow = _verkopen(_indexVolgendAfTeDrukkenDetail)
                top = PrintVerkoop(verkoop, detailBlok.SjabloonRij, top)
                If (IsPaginaBeperkt() AndAlso (top + _font.Height > PrintableHeight)) Then Exit While
                _indexVolgendAfTeDrukkenDetail += 1
            End While
            Return top
        End Function

        Protected Overrides Sub PrintVoettekst(ByVal top As Integer)
            Dim totalenBlok As DocumentBlok = GetBlok("totaal")
            totalenBlok.SetCelCurrency("totaalverkocht", TotaalPrijsExclusief)
            totalenBlok.SetCelCurrency("leeggoedcheques", _leeggoedEnCheques)
            totalenBlok.SetCelCurrency("btw0", _bTW0 - _leeggoedEnCheques)
            totalenBlok.SetCelCurrency("btw6vak01", _bTW6 / 1.06D)
            totalenBlok.SetCelCurrency("btw21vak03", _bTW21 / 1.21D)
            totalenBlok.SetCelCurrency("kasverschil", _kasverschil)

            totalenBlok.SetCelCurrency("totaalbtw6", _bTW6 / 1.06D * 0.06D)
            totalenBlok.SetCelCurrency("totaalbtw21", _bTW21 / 1.21D * 0.21D)
            totalenBlok.SetCelCurrency("totaalbtw", TotaalBTW)

            totalenBlok.SetCelCurrency("totaalverkochtincl", _totaalPrijs)
            totalenBlok.SetCelCurrency("leeggoedchequesincl", _leeggoedEnCheques)
            totalenBlok.SetCelCurrency("totaalbtw0incl", _bTW0 - _leeggoedEnCheques)
            totalenBlok.SetCelCurrency("totaalbtw6incl", _bTW6)
            totalenBlok.SetCelCurrency("totaalbtw21incl", _bTW21)

            top = PrintBlok(totalenBlok, top)
        End Sub

        Protected Overrides Function ShouldPrintPageNumber() As Boolean
            Return True
        End Function

#End Region

#Region "Private methods"

        ''' <summary>
        ''' 
        ''' </summary>
        ''' <param name="top">Bovenkant vanaf waar geprint moet worden</param>
        ''' <returns>Bovenkant-positie van de volgende rij in dpi</returns>
        Private Function PrintVerkoop(ByVal verkoopsrow As ArtikelsDataSet.VerkopenRow, ByVal sjabloonRij As DocumentRij, ByVal top As Integer) As Integer
            Dim verkoop As New Verkoop(verkoopsrow)

            sjabloonRij.SetCelTekst("datum", verkoopsrow.Datum.ToShortDateString())
            If (Not verkoopsrow.IsFactuurNummerNull AndAlso verkoopsrow.FactuurNummer <> 0) Then
                sjabloonRij.SetCelTekst("factuurnummer", verkoopsrow.FactuurNummer.ToString())
            End If
            Dim verkoopsoort As String = ""
            Select Case verkoopsrow.IdSoort
                Case Constants.VerkoopsoortIds.WINKEL
                    verkoopsoort = "Winkel"
                Case Constants.VerkoopsoortIds.TUSSENDOOR
                    verkoopsoort = "Tussendoor"
                Case Constants.VerkoopsoortIds.FACTUUR
                    verkoopsoort = "Factuur"
                Case Constants.VerkoopsoortIds.TIELT_WINGE
                    verkoopsoort = "Tielt"
                Case Constants.VerkoopsoortIds.STAND
                    verkoopsoort = "Stand"
            End Select
            If (verkoopsrow.IsOmschrijvingNull OrElse verkoopsrow.Omschrijving = "") Then
                sjabloonRij.SetCelTekst("omschrijving", verkoopsoort)
            Else
                sjabloonRij.SetCelTekst("omschrijving", String.Format("{0} | {1}", verkoopsoort, verkoopsrow.Omschrijving))
            End If
            sjabloonRij.SetCelCurrency("totaalverkocht", verkoop.TotaalMetLeeggoedEnCheques)
            sjabloonRij.SetCelCurrency("beginsaldo", verkoopsrow.Begintotaal)
            sjabloonRij.SetCelCurrency("leeggoedcheques", verkoop.LeeggoedEnCheques)
            sjabloonRij.SetCelCurrency("btw0", verkoop.BtwTotalen.BtwMetPercentage(0S).TotaalMetBtw - verkoop.LeeggoedEnCheques)
            sjabloonRij.SetCelCurrency("btw6", verkoop.BtwTotalen.BtwMetPercentage(6S).TotaalMetBtw)
            sjabloonRij.SetCelCurrency("btw6vak01", verkoop.BtwTotalen.BtwMetPercentage(6S).TotaalZonderBtw)
            sjabloonRij.SetCelCurrency("btw21", verkoop.BtwTotalen.BtwMetPercentage(21S).TotaalMetBtw)
            sjabloonRij.SetCelCurrency("btw21vak03", verkoop.BtwTotalen.BtwMetPercentage(21S).TotaalZonderBtw)
            sjabloonRij.SetCelCurrency("inuitkasbedrag", verkoopsrow.InUitKasBedrag)
            sjabloonRij.SetCelTekst("inuitkasreden", verkoopsrow.InUitKasReden)
            sjabloonRij.SetCelCurrency("naarbedrag", verkoopsrow.NaarBankBedrag)
            sjabloonRij.SetCelTekst("bankrefwie", String.Format("{0} | {1}", verkoopsrow.NaarBankReferentie, verkoopsrow.NaarBankNaam))
            sjabloonRij.SetCelCurrency("kasverschil", verkoop.Kasverschil)
            sjabloonRij.SetCelCurrency("eindsaldo", verkoopsrow.Eindtotaal)
            'sjabloonRij.SetCelTekst("bankdatum", verkoop.bankdatum) ' TODO
            'sjabloonRij.SetCelTekst("bankuittreksel", verkoop.bankuittreksel) ' TODO

            ' hou tijdens het afdrukken de lopende totalen bij
            _totaalPrijs += verkoop.TotaalMetLeeggoedEnCheques
            _leeggoedEnCheques += verkoop.LeeggoedEnCheques
            _bTW0 += verkoop.BtwTotalen.BtwMetPercentage(0S).TotaalMetBtw
            _bTW6 += verkoop.BtwTotalen.BtwMetPercentage(6S).TotaalMetBtw
            _bTW21 += verkoop.BtwTotalen.BtwMetPercentage(21S).TotaalMetBtw
            _kasverschil += verkoop.Kasverschil

            Return PrintRij(sjabloonRij, top)
        End Function

        Private Function TotaalPrijsExclusief() As Decimal
            Return _bTW0 + (_bTW6 / 1.06D) + (_bTW21 / 1.21D)
        End Function

        Private Function TotaalBTW() As Decimal
            Return (_bTW6 / 1.06D * 0.06D) + (_bTW21 / 1.21D * 0.21D)
        End Function

#End Region

    End Class

End Namespace
